我最近開始學習 PowerBI(PBI),發現PBI看似簡單但意外地相當複雜。
我想這是一個很好的機會,讓我分享和記錄我的學習進度。
對於那些希望更好理解PBI的人,請參考我的先前文章: 簡單介紹PowerBI - Part 1 以及 簡單介紹PowerBI - Part 2
什麼是DAX?
DAX(Data Analysis Expressions)是由微軟發明的一種編程語言。您可以使用它在Power BI、Analysis Services和Excel數據模型中構建公式和表達式。
DAX的最基本結構是什麼?
我們來拆解一個簡單DAX公式的結構。
下面我來拆解一下基本常用的DAX functions:
(1) SUMX vs SUM
SUM是計算所選列總和的公式。如果您只想要單個列的匯總總數,這很有用。
*例如:Total Sales = SUM([SalesAmount])
SUMX,與SUM類似,但您可以一次聚合多個列。您需要指示列位於哪個表中。
*例如:Gross_Margin=SUMX(FactSales,FactSales[SalesAmount] -FactSales[TotalCost])
SUMX實際上是一個迭代函數,它將創建一個臨時表,用於存儲所選列的每一行的總和
注意:上述內容適用於其他聚合函數,如以下所示:
(2) Respective Function VS Non Respective Function
表導出將從數據模型中的數據創建臨時表。有兩種類型:
可尊重的
此函數將尊重報告中選擇的過濾器上下文
例如:FactSales(Tbl),VALUES(FactSales[SalesAmount])
不可尊重的
忽略報告中的過濾器上下文,將包括所選行/表的所有內容
例如:ALL(FactSales),ALL(FactSales[SalesAmount])
(3) CALCULATE()CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])
此函數在過濾上下文中評估表達式/公式。
例如:CALCULATE(SUM([SalesAmount]), 'FactSales'[OrderDate] = '2023-09-16')
(4)FILTER函數
這是理解DAX的關鍵。由於在PBI中有多種應用過濾器的方式,因此了解過濾函數以創建正確和準確的計算非常重要。
(5) SWITCH()SWITCH(<expression>, <value>, <result>[, <value>, <result>]…[, <else>])
這是功能強大的DAX函數,類似於SQL中的CASE STATEMENT。
它可以評估表達式並基於返回值返回多個可能的結果。表達式可以參考布爾值(例如:TRUE())或表(例如:FactSales)
例如:SWITCH(TRUE(), ALL(FactSales[SalesAmount])< 5000,'Target Not Met',ALL(FactSales[SalesAmount])>=5000,"Target Met")
(6) DIVIDE()
是除法運算符,如果分母為零,則將結果默認為空白,而不是錯誤。
(7) Declare Variables
您還可以在公式中聲明多個變數,以創建更複雜的測量。
例如:
Gross Margin =
Var x = sum(FactSales[SalesAmount])
Var y =sum(FactSales[TotalCost])
Var z = x-y
Return divide (z,x)
希望以上的一些基礎能夠幫助到剛接觸PBI的大家。
https://radacad.com/sum-vs-sumx-what-is-the-difference-of-the-two-dax-functions-in-power-bi
https://janzednicek.cz/en/aggregation-in-dax-how-aggregations-work-function-overview/
https://learn.microsoft.com/en-us/dax/filter-functions-dax
對 dbt 或 data 有興趣 ?歡迎加入 dbt community 到 #local-taipei 找我們,也有實體 Meetup 請到 dbt Taipei Meetup 報名參加